package com.csailing4cloud.csailing.common.redis.annotation;

import java.lang.annotation.*;

/**
 * @author dyh
 * 限流
 */
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimiter {

    /**
     * 大方向根据RateLimiterDetail.Base进行限流，RateLimiterDetail 为数组说明可以配置多个，并行使用
     * 默认：@RateLimiter 对request.getURI限流（简称uri），每个URI 1分钟3分请求,如果需要变动，需自己配
     * General: @RateLimiter(rateLimiterDetails = @RateLimiterDetail(base = RateLimiterDetail.Base.General,path = "test_rateLimiter",permits = 50,time = 5,timeUnit = TimeUnit.MINUTES))
     *          5分钟内只能有50个请求
     * Args:  @RateLimiter(rateLimiterDetails = @RateLimiterDetail(base = RateLimiterDetail.Base.Args,argNames = {"phone"},permits = 10,time = 100))
     *        采用参数方式，需要配置argNames。如上配置：如果该接口包含phone字段，100秒内值能请求10次
     * @return
     */
    RateLimiterDetail[] rateLimiterDetails() default @RateLimiterDetail();

}
